package com.heima.media.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.heima.common.dto.ResponseResult;
import com.heima.media.entity.WmSensitive;
import com.heima.media.service.IAuditService;
import com.heima.media.service.IWmSensitiveService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private IAuditService auditService;


    /**
     * 只是为了测试，当自媒体用户发表自媒体文章后，调用该接口对自媒体文章进行审核
     *
     * @param id 自媒体文章ID
     * @return
     */
    @GetMapping("/audit/{id}")
    public ResponseResult audit(@PathVariable("id") Integer id) {
        auditService.audit(id);
        return ResponseResult.okResult();
    }


    @Autowired
    private IWmSensitiveService sensitiveService;

    /**
     * 从excel中读取敏感词更新到数据库
     * TODO 改为上传敏感词excel文件
     *
     * @param fileName
     * @return
     */
    @PostMapping("/read")
    public ResponseResult readExcel(String fileName) {
        // 通过easyExcel读取表格中的内容
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
        // 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行
        EasyExcel.read(fileName, WmSensitive.class, new PageReadListener<WmSensitive>(dataList -> {
            for (WmSensitive sensitive : dataList) {
                log.info("读取到一条数据{}", JSON.toJSONString(sensitive));
                // 根据铭感词查询是否存在
                List<WmSensitive> wmSensitives = new ArrayList<>();
                LambdaUpdateWrapper<WmSensitive> queryWrapper = new LambdaUpdateWrapper<>();
                queryWrapper.eq(WmSensitive::getSensitives, sensitive.getSensitives());
                int count = sensitiveService.count(queryWrapper);
                if (count <= 0) {
                    sensitive.setCreatedTime(new Date());
                    wmSensitives.add(sensitive);
                }
                //批量保存
                sensitiveService.saveBatch(wmSensitives);
            }
        })).sheet().doRead();
        return ResponseResult.okResult();
    }


    /**
     * 读取数据库写入到excel中
     * @param fileName
     * @return
     */
    @PostMapping("/write")
    public ResponseResult writeExcel(String fileName){
        // 从数据库查询敏感词列表
        List<WmSensitive> list = sensitiveService.list();
        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, WmSensitive.class)
                .sheet("敏感词")
                .doWrite(() -> {
                    // 分页查询数据
                    return list;
                });
        return ResponseResult.okResult();
    }
}
